#ifndef __WHIMSY_PROPERTY_TRAITS_HPP__SHANHAOBO_19800429__
#define __WHIMSY_PROPERTY_TRAITS_HPP__SHANHAOBO_19800429__

#include "./WhimsyProperty.hpp"
#include "./WhimsyPropertyNet.hpp"

namespace Whms
{
    namespace Property
    {
        namespace Traits
        {
            template<class InType>
            struct Type
            {
                typedef InType tStd;
                typedef InType tNet;
            };

            template<>
            struct Type<::Whms::Int8::Type>
            {
                typedef ::Whms::Property::Int8::Type                tStd;
                typedef ::Whms::Property::Net::Base::Int8::Type     tNet;
            };

            template<>
            struct Type<::Whms::Int16::Type>
            {
                typedef ::Whms::Property::Int16::Type               tStd;
                typedef ::Whms::Property::Net::Base::Int16::Type    tNet;
            };


            template<>
            struct Type<::Whms::Int32::Type>
            {
                typedef ::Whms::Property::Int32::Type               tStd;
                typedef ::Whms::Property::Net::Base::Int32::Type    tNet;
            };

            template<>
            struct Type<::Whms::Int64::Type>
            {
                typedef ::Whms::Property::Int64::Type               tStd;
                typedef ::Whms::Property::Net::Base::Int64::Type    tNet;
            };

            template<>
            struct Type<::Whms::UInt8::Type>
            {
                typedef ::Whms::Property::UInt8::Type               tStd;
                typedef ::Whms::Property::Net::Base::UInt8::Type    tNet;
            };

            template<>
            struct Type<::Whms::UInt16::Type>
            {
                typedef ::Whms::Property::UInt16::Type              tStd;
                typedef ::Whms::Property::Net::Base::UInt16::Type   tNet;
            };


            template<>
            struct Type<::Whms::UInt32::Type>
            {
                typedef ::Whms::Property::UInt32::Type              tStd;
                typedef ::Whms::Property::Net::Base::UInt32::Type   tNet;
            };

            template<>
            struct Type<::Whms::UInt64::Type>
            {
                typedef ::Whms::Property::UInt64::Type              tStd;
                typedef ::Whms::Property::Net::Base::UInt64::Type   tNet;
            };

            template<>
            struct Type<::Whms::Real32::Type>
            {
                typedef ::Whms::Property::Real32::Type              tStd;
                typedef ::Whms::Property::Net::Base::Real32::Type   tNet;
            };

            template<>
            struct Type<::Whms::Real64::Type>
            {
                typedef ::Whms::Property::Real64::Type              tStd;
                typedef ::Whms::Property::Net::Base::Real64::Type   tNet;
            };

            template<>
            struct Type<::Whms::Vec2::Type>
            {
                typedef ::Whms::Property::Vec2::Type                tStd;
                typedef ::Whms::Property::Net::Base::Vec2::Type     tNet;
            };

            template<>
            struct Type<::Whms::Vec3::Type>
            {
                typedef ::Whms::Property::Vec3::Type                tStd;
                typedef ::Whms::Property::Net::Base::Vec3::Type     tNet;
            };

            template<>
            struct Type<::Whms::Vec4::Type>
            {
                typedef ::Whms::Property::Vec4::Type                tStd;
                typedef ::Whms::Property::Net::Base::Vec4::Type     tNet;
            };

            template<>
            struct Type<::Whms::IntVec2::Type>
            {
                typedef ::Whms::Property::IntVec2::Type             tStd;
                typedef ::Whms::Property::Net::Base::IntVec2::Type  tNet;
            };

            template<>
            struct Type<::Whms::IntVec3::Type>
            {
                typedef ::Whms::Property::IntVec3::Type             tStd;
                typedef ::Whms::Property::Net::Base::IntVec3::Type  tNet;
            };

            template<>
            struct Type<::Whms::IntVec4::Type>
            {
                typedef ::Whms::Property::IntVec4::Type             tStd;
                typedef ::Whms::Property::Net::Base::IntVec4::Type  tNet;
            };

        } /// end of namespace Traits
    } /// end of namespace Property
} /// end of namespace Whms

#endif /*__WHIMSY_PROPERTY_TRAITS_HPP__SHANHAOBO_19800429__*/
